﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Metadata.Edm;
using System.Web.Mvc;
namespace SoftHotel.Models
{
    public class ConsumoDAO : DbContext
    {
        public DbSet<Consumo> consumos { get; set; } //NO LO CAMBIES , NO GENERA NINGUN CONFLICTO.............
        public DbSet<DatoConsumo> datosConsumo { get; set; }


        public List<Consumo> consumoslista = new List<Consumo>() { };
        public List<Consumo> busquedacon = new List<Consumo>() { };
     //   public DbSet<ConsumoDocVenta> consumo { get; set; }

        public ConsumoDAO() : base("conexionPrincipalDAO") { }
        private Conexion conexionBD = new Conexion();

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ServicioDocVenta>().ToTable("Servicio");
            modelBuilder.Entity<Consumo>().ToTable("Consumo");
            modelBuilder.Entity<DatoServicio>().ToTable("DatoConsumo");
        }

        public void Agregar(Consumo consumo)
        {
            consumo.fecha = DateTime.Now;
            consumo.estado = 1;
            consumos.Add(consumo);
        }

        public Consumo Buscar(int idConsumo)
        {
            Consumo con = consumos.Where(g => g.idConsumo == idConsumo).First();
            con.detalleMoneda = getMoneda(con.moneda);
            con.nombreEstado = getEstado(con.estado);
            con.numeroReserva = getNumeroReserva(con.idReserva);
            con.nombreCliente = getNombreCliente(con.idCliente);
            ServicioDAO sdao = new ServicioDAO();
            con.servicio = sdao.Buscar(con.idServicio);
            return con;
        }

        public List<Consumo> Buscar(Consumo consumo)
        {
            var con = consumos.Where(g => g.idCliente == consumo.idCliente);
            foreach (Consumo c in con)
            {
                c.detalleMoneda = getMoneda(c.moneda);
                c.nombreEstado = getEstado(c.estado);
                c.numeroReserva = getNumeroReserva(c.idReserva);
                c.nombreCliente = getNombreCliente(c.idCliente);
                ServicioDAO sdao = new ServicioDAO();
                c.servicio = sdao.Buscar(c.idServicio);
            }
            return con.ToList();
        }

        public void Editar(Consumo consumo)
        {
            this.Entry(consumo).State = EntityState.Modified;
            this.SaveChanges();
        }

        public void Anular(Consumo consumo)
        {
            consumo.estado = 0;
            this.Entry(consumo).State = EntityState.Modified;
            this.SaveChanges();
        }

        public void AgregarDato(DatoConsumo detalle)
        {
            datosConsumo.Add(detalle);
        }

        public void EditarDato(DatoConsumo detalle)
        {
            this.Entry(detalle).State = EntityState.Modified;
            this.SaveChanges();
        }

        public void EliminarDato(DatoConsumo detalle)
        {
            this.Entry(detalle).State = EntityState.Deleted;
            this.SaveChanges();
        }




        /*



        public List<Consumo> ejecutar_query(string tipo)
        {
            string consulta = "";
            conexionBD.AbrirConexion();
            List<Consumo> consumos = new List<Consumo>();
            if (tipo.Equals("T")) consulta = "select idConsumo, idAmbiente, idCliente, idReserva,idServicio, convert(varchar, fecha, 105), cantidad, dato1, dato2, dato3, dato4, dato5, dato6, dato7 , dato8, dato9, dato10, tipo, monto, montoTotal, estado, moneda from CONSUMO";
            else consulta = "select idConsumo, idAmbiente, idCliente, idReserva,idServicio, convert(varchar, fecha, 105), cantidad, dato1, dato2, dato3, dato4, dato5, dato6, dato7 , dato8, dato9, dato10, tipo, monto, montoTotal, estado, moneda from CONSUMO WHERE tipo= \'" + tipo + "\'";

            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            while (dataReader != null && dataReader.Read())
            {
                Consumo consumo = new Consumo();
                consumo.idConsumo = Convert.ToInt16(dataReader[0].ToString());
                consumo.idAmbiente = Convert.ToInt16(dataReader[1].ToString());
                consumo.nombreAmbiente = getNombreAmbiente(consumo.idAmbiente);		//BUSCA EL NOMBRE DEL AMBIENTE
                consumo.idCliente = Convert.ToInt16(dataReader[2].ToString());
                consumo.nombreCliente = getNombreCliente(consumo.idCliente);		//BUSCA EL NOMBRE COMPLETO DEL CLIENTE
                consumo.idReserva = Convert.ToInt16(dataReader[3].ToString());
                consumo.numeroReserva = getNumeroReserva(consumo.idReserva);		//BUSCA EL NUMERO DE RESERVA 
                consumo.idServicio = Convert.ToInt16(dataReader[4].ToString());
                consumo.servicio = sdao.Buscar(consumo.idServicio);		//BUSCA EL NOMBRE DEL SERVICIO
             //   consumo.fecha = dataReader[5].ToString();
                consumo.cantidad = Convert.ToInt16(dataReader[6].ToString());
                consumo.tipo = dataReader[17].ToString();
                consumo.monto = Convert.ToDecimal(dataReader[18].ToString());
                consumo.montoTotal = Convert.ToDecimal(dataReader[19].ToString());
                consumo.estado = Convert.ToInt16(dataReader[20].ToString());
                consumo.nombreEstado = getEstado(consumo.estado);
                consumo.moneda = Convert.ToInt16(dataReader[21].ToString());
               // consumo.detalleMoneda = getMoneda(consumo.moneda);
                consumos.Add(consumo);
            }
            conexionBD.CerrarConexion();
            return consumos;
        }

        public Consumo getConsumo(int idConsumo)
        {
            String consulta = "";
            consulta = "select idConsumo, idAmbiente, idCliente, idReserva,idServicio, convert(varchar, fecha, 105), cantidad, dato1, dato2, dato3, dato4, dato5, dato6, dato7 , dato8, dato9, dato10, tipo, monto, montoTotal, estado, moneda from CONSUMO where idConsumo = \'" + idConsumo + "\'";
            conexionBD.AbrirConexion();
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);

            Consumo consumo = new Consumo();
            dataReader.Read();
            consumo.idConsumo = Convert.ToInt16(dataReader[0].ToString());
            consumo.idAmbiente = Convert.ToInt16(dataReader[1].ToString());
            consumo.nombreAmbiente = getNombreAmbiente(consumo.idAmbiente);		//BUSCA EL NOMBRE DEL AMBIENTE
            consumo.idCliente = Convert.ToInt16(dataReader[2].ToString());
            consumo.nombreCliente = getNombreCliente(consumo.idCliente);		//BUSCA EL NOMBRE COMPLETO DEL CLIENTE
            consumo.idReserva = Convert.ToInt16(dataReader[3].ToString());
            consumo.numeroReserva = getNumeroReserva(consumo.idReserva);		//BUSCA EL NUMERO DE RESERVA 
            consumo.idServicio = Convert.ToInt16(dataReader[4].ToString());
            consumo.servicio = sdao.Buscar(consumo.idServicio);		//BUSCA EL NOMBRE DEL SERVICIO
         //   consumo.fecha = dataReader[5].ToString();
            consumo.cantidad = Convert.ToInt16(dataReader[6].ToString());
            consumo.tipo = dataReader[17].ToString();
            consumo.monto = Convert.ToDecimal(dataReader[18].ToString());
            consumo.montoTotal = Convert.ToDecimal(dataReader[19].ToString());
            consumo.estado = Convert.ToInt16(dataReader[20].ToString());
            consumo.nombreEstado = getEstado(consumo.estado);
            consumo.moneda = Convert.ToInt16(dataReader[21].ToString());
           // consumo.detalleMoneda = getMoneda(consumo.moneda);
            dataReader.Close();
            conexionBD.CerrarConexion();
            return consumo;
        }

        public void add_consumo(Consumo consumo)
        {
            string consulta = "";
            conexionBD.AbrirConexion();
            consulta = "INSERT INTO CONSUMO (idAmbiente, idCliente, idReserva,idServicio,fecha, cantidad, dato1, dato2, dato3, dato4, dato5, dato6, dato7 , dato8, dato9, dato10, tipo, monto, montoTotal, estado, moneda)" +
                       "VALUES (@idAmbiente,@idCliente,@idReserva,@idServicio,getDate(),@cantidad,@dato1,@dato2,@dato3,@dato4,@dato5,@dato6,@dato7,@dato8,@dato9,@dato10,@tipo,@monto,@montoTotal,1, @moneda)";

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = consulta;

            command.Parameters.Add("@idAmbiente", SqlDbType.Int).Value = consumo.idAmbiente;
            command.Parameters.Add("@idCliente", SqlDbType.Int).Value = consumo.idCliente;
            command.Parameters.Add("@idReserva", SqlDbType.Int).Value = consumo.idReserva;
            command.Parameters.Add("@idServicio", SqlDbType.Int).Value = consumo.idServicio;
            command.Parameters.Add("@cantidad", SqlDbType.Int).Value = consumo.cantidad;
 
            command.Parameters.Add("@tipo", SqlDbType.Char, 1).Value = consumo.tipo;
            command.Parameters.Add("@monto", SqlDbType.Decimal).Value = consumo.monto;
            command.Parameters.Add("@montoTotal", SqlDbType.Decimal).Value = consumo.montoTotal;
            command.Parameters.Add("@moneda", SqlDbType.Int).Value = 74;

            conexionBD.EjecutarComando2(command);
            conexionBD.CerrarConexion();

        }

        public void eliminar_consumo(String id)
        {
            string delete = "";
            conexionBD.AbrirConexion();
            delete = "UPDATE CONSUMO SET estado = 0 WHERE idConsumo = " + id;
            conexionBD.EjecutarComando(delete);
            conexionBD.CerrarConexion();
        }


        public void editar_consumo(int id, Consumo consumo)
        {

            string update = "";

            conexionBD.AbrirConexion();
            update = "UPDATE CONSUMO SET  idAmbiente=@idAmbiente, idCliente=@idCliente, idReserva=@idReserva,idServicio=@idServicio, cantidad=@cantidad, dato1=@dato1, dato2=@dato2, dato3=@dato3, dato4=@dato4,"
                    + "dato5=@dato5,dato6=@dato6,dato7=@dato7,dato8=@dato8,dato9=@dato9,dato10=@dato10, monto=@monto, montoTotal=@montoTotal, moneda =@moneda where idConsumo = " + id;

            SqlCommand command = conexionBD.connection.CreateCommand();
            command.CommandText = update;

            command.Parameters.Add("@idAmbiente", SqlDbType.Int).Value = consumo.idAmbiente;
            command.Parameters.Add("@idCliente", SqlDbType.Int).Value = consumo.idCliente;
            command.Parameters.Add("@idReserva", SqlDbType.Int).Value = consumo.idReserva;
            command.Parameters.Add("@idServicio", SqlDbType.Int).Value = consumo.idServicio;
            command.Parameters.Add("@cantidad", SqlDbType.Int).Value = consumo.cantidad;

            command.Parameters.Add("@tipo", SqlDbType.Char, 1).Value = consumo.tipo;
            command.Parameters.Add("@monto", SqlDbType.Decimal).Value = consumo.monto;
            command.Parameters.Add("@montoTotal", SqlDbType.Decimal).Value = consumo.montoTotal;
            command.Parameters.Add("@moneda", SqlDbType.Int).Value = consumo.moneda;

            conexionBD.EjecutarComando2(command);
            conexionBD.CerrarConexion();
        }

        /**AUXILIAREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEES**/

        public String getEstado(int id)
        {
            conexionBD.AbrirConexion();
            String consulta = "SELECT valor from PARAMETRO WHERE tipo = 'ESTADO_CONSUMO' and valorNum= " + id;
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string aux = dataReader[0].ToString();
            dataReader.Close();
            conexionBD.CerrarConexion();
            return aux;
        }

        public String getMoneda(int id)
        {
            conexionBD.AbrirConexion();
            String consulta = "SELECT valor from PARAMETRO WHERE idParametro= " + id;
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string aux = dataReader[0].ToString();
            dataReader.Close();
            conexionBD.CerrarConexion();
            return aux;
        }

        public String getNombreCliente(int id)
        {
            conexionBD.AbrirConexion();
            String consulta = "SELECT nombres, apellidoPaterno, apellidoMaterno from CLIENTE WHERE idCLiente= " + id;
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string aux1 = dataReader[0].ToString();
            string aux2 = dataReader[1].ToString();
            string aux3 = dataReader[2].ToString();
            dataReader.Close();
            conexionBD.CerrarConexion();
            return aux1 + " " + aux2 + " " + aux3;
        }

        public String getNumeroReserva(int id)
        {
            conexionBD.AbrirConexion();
            String consulta = "SELECT numeroReserva from RESERVA WHERE idReserva= " + id;
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string aux1 = dataReader[0].ToString();
            dataReader.Close();
            conexionBD.CerrarConexion();
            return aux1;
        }

        public String getNombreAmbiente(int id)
        {
            conexionBD.AbrirConexion();
            String consulta = "SELECT nombre from AMBIENTE WHERE idAmbiente= " + id;
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            string aux1 = dataReader[0].ToString();
            dataReader.Close();
            conexionBD.CerrarConexion();
            return aux1;
        }

        public Decimal getPrecio(int id)
        {
            conexionBD.AbrirConexion();
            String consulta = "SELECT precio from DETALLEPRECIO WHERE idServicio= " + id;
            SqlDataReader dataReader = conexionBD.EjecutarReader(consulta);
            dataReader.Read();
            Decimal aux1 = Convert.ToDecimal(dataReader[0].ToString());
            dataReader.Close();
            conexionBD.CerrarConexion();
            return aux1;
        }




    }
}